package com.wk.net.heartbeat.handler;

/**
 * 处理收到的心跳<br>
 * 
 * 
 * @author Bai Yu
 *
 * @param <HeartbeatType>
 *            心跳类型
 */
public interface HeartbeatListener<HeartbeatType> {
	/**
	 * 处理心跳
	 * 
	 * @param message
	 *            心跳，包括下列信息：<br>
	 *            1.心跳源{@link ParsedHeartbeatMessage#source}<br>
	 *            2.心跳源是否被监视？{@link ParsedHeartbeatMessage#isSourceObserved}<br>
	 *            3.心跳信息的载荷{@link ParsedHeartbeatMessage#heartbeat}
	 */
	void onHeartbeat(ParsedHeartbeatMessage<HeartbeatType> message);

	/**
	 * 处理心跳后，决定是否要新增或删除监视<br>
	 * 
	 * @param message
	 *            最近处理的心跳
	 * @param observer
	 *            心跳监视器。在该监视器中新增或删除心跳源的监视，或保持不变<br>
	 *            如果确实需要新增或删除监视，则应加锁
	 * 
	 */
	void alterObservation(ParsedHeartbeatMessage<HeartbeatType> recentMessage, HeartbeatObserver observer);
}
